#!/bin/bash

all_ns=no

ns=
pod=
action=exec
cmd=
options=

while getopts "n:p:m:a:c:o:A" opt; do
  case $opt in
    A) ns='全部命名空间' ; all_ns=yes ;;
    o) options=$OPTARG ;;
    n) ns=$OPTARG ;;
    p) pod=$OPTARG ;;
    m) ns=$OPTARG ; pod=$OPTARG ;;
    a) action=$OPTARG ;;
    \?) echo -e "\n参数说明：\n-n 指定命名空间\n-p 指定pod名称（支持模糊匹配）\n-m 同时指定命名空间和pod名称\n-o 附加参数\n-a 指定动作（exec=运行命令；cpto=从宿主机拷文件到容器内；cpfrom=从容器中拷贝文件到宿主）\n" ; exit 1 ;;
  esac
done

# 表示将文件名前面的选项和参数踢掉
shift $[$OPTIND-1]

cmd=$*

if [[ "$ns" = "" ]];
then
  echo -e "\n[ ERROR ] 请使用参数 -n 指定命名空间\n";
  exit 1;
fi
if [[ "$pod" = "" ]];
then
  echo -e "\n[ ERROR ] 请使用参数 -p 指定pod名称\n";
  exit 1;
elif [[ "$pod" = "*" ]];
then
  pod=""
fi

echo -e "\n[ INFO ] ns=$ns | pod=$pod | action=$action | cmd=$cmd | options=$options \n"


if [[ "$all_ns" = "yes" ]];
then
  pod_list=$(kubectl get pods -A | awk 'NR!=1' | grep "$pod" | awk '{print $1 "," $2}')
else
  pod_list=$(kubectl get pods -n $ns | awk 'NR!=1' | grep "$pod" | awk '{print "'$ns'" "," $1}')
fi

# echo $pod_list

for i in $pod_list;
do
  item_list=(${i//,/ })
  item_ns=${item_list[0]}
  item_pod=${item_list[1]}
  echo -e "==================== [ $item_ns/$item_pod ] ==================="
  case $action in
    exec) kubectl exec $options -n $item_ns $item_pod -- $cmd ;;
    cpto) kubectl cp -n $item_ns $1 $item_pod:$2 ;;
    cpfrom) kubectl cp -n $item_ns $item_pod:$1 $2 ;;
    *) kubectl $action -n $item_ns $item_pod $cmd ;;
  esac
  echo -e "\n"
done;

